from database import engine, Base, SessionLocal
from models import Users, UserType, Kami, Config
from passlib.context import CryptContext
import uuid
from datetime import datetime, timezone

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")


def init():
    Base.metadata.create_all(bind=engine)  # 自动建表
    db = SessionLocal()

    # 创建管理员账户
    if not db.query(Users).filter_by(username="xiaolin").first():
        admin = Users(
            username="xiaolin",
            password=pwd_context.hash("xiaolin123456"),
            status=1,
            user_type=UserType.admin,
        )
        db.add(admin)
        db.commit()

    # 添加测试卡密
    if not db.query(Kami).first():  # 如果表里还没有数据
        test_kamis = [
            Kami(code="TEST-123456", vip_type=UserType.month, days=30, is_used=0,
                 created_at=datetime.now(timezone.utc)),
            Kami(code="TEST-654321", vip_type=UserType.season, days=90, is_used=0,
                 created_at=datetime.now(timezone.utc)),
            Kami(code="VIP-20240830", vip_type=UserType.year, days=365, is_used=0,
                 created_at=datetime.now(timezone.utc)),
        ]
        db.add_all(test_kamis)
        db.commit()
        print("✅ 默认卡密数据已插入")

    # 新增：添加系统配置默认数据（只在配置表为空时添加）
    if not db.query(Config).first():
        system_configs = [
            # 1. 系统基础设置（typeid=1）
            Config(
                field="config_webname",
                title="系统名称",
                tip="系统名称",
                data="API管理系统",
                typeid=1,
                orders=1
            ),
            Config(
                field="config_version",
                title="系统版本",
                tip="系统版本号",
                data="V1.0.0",
                typeid=1,
                orders=2
            ),

            # 2. 调用次数限制（typeid=2）
            Config(
                field="config_free_api",
                title="免费用户",
                tip="免费用户每日调用上限",
                data="3",
                typeid=2,
                orders=1
            ),
            Config(
                field="config_month_api",
                title="金牌会员",
                tip="金牌会员每日调用上限",
                data="2000",
                typeid=2,
                orders=2
            ),
            Config(
                field="config_season_api",
                title="钻石会员",
                tip="钻石会员每日调用上限",
                data="5000",
                typeid=2,
                orders=3
            ),
            Config(
                field="config_year_api",
                title="至尊用户",
                tip="至尊用户每日调用上限",
                data="10000",
                typeid=2,
                orders=4
            ),

            # 3. 会员价格设置（typeid=3）
            Config(
                field="config_month_price",
                title="金牌会员价格",
                tip="",
                data="14.9",
                typeid=3,
                orders=1
            ),
            Config(
                field="config_season_price",
                title="钻石会员价格",
                tip="",
                data="79.9",
                typeid=3,
                orders=2
            ),
            Config(
                field="config_year_price",
                title="至尊用户价格",
                tip="",
                data="149.9",
                typeid=3,
                orders=3
            ),

            # 4. 支付设置（typeid=4，1=开启，0=关闭）
            Config(
                field="config_wxpay",
                title="微信支付",
                tip="（1=开启，0=关闭）",
                data="1",
                typeid=4,
                orders=1
            ),
            Config(
                field="config_alipay",
                title="支付宝",
                tip="（1=开启，0=关闭）",
                data="1",
                typeid=4,
                orders=2
            ),
            Config(
                field="config_kamipay",
                title="卡密支付",
                tip="（1=开启，0=关闭）",
                data="1",
                typeid=4,
                orders=3
            )
        ]
        db.add_all(system_configs)
        db.commit()
        print("✅ 系统配置默认数据已插入")

    db.close()
    print("✅ 数据库初始化完成")


if __name__ == "__main__":
    init()
